#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main()
{
//    printf("hello");
//    sleep(1);
//    exit(1);
      
    pid_t id=fork();
    if(id ==0)
    {
        //子进程
        int cnt=5;
        while(cnt)
        {
            printf("我是子进程: %d , 父进程 : %d ,cnt: %d\n",getpid(),getppid(),cnt--);
            sleep(1);
            int a=10;
            a/=0;
        }
        //运行完
        //1.代码完，结果对
        //2.代码完，结果不对
        //异常
        //3.代码没跑完，出异常了
        exit(12);//退出进程
    }
    //父进程
    //sleep(15);
    //pid_t ret=wait(NULL);
    int status=0;
    pid_t ret=waitpid(id,&status,0);

    if(id > 0)
    {
        printf("wait success: %d, sig number: %d, child exit code: %d\n",ret,(status & 0x7F),(status >> 8)&0xFF);
    }
    sleep(5);
}


//int addToTarget(int from, int to)
//{
//    int sum=0;
//    int i=0;
//    for(i=from;i<=to;i++)
//    {
//        sum += i;
//    }
//    return sum;
//}
//
//int main()
//{
//
//    printf("hello world!\n");
//    exit(12);
//    int ret = addToTarget(1,100);
//
//    printf("ret:%d\n",ret);
//
//    while(1)
//        sleep(1);
//    for(int i=0;i<200;i++)
//    {
//        printf("%d:%s\n",i,strerror(i));
//    }
//     // 写代码是为了完成某件事情，我如何得知我的任务跑的如何呢？
//    
//    // 进程退出的时候，对应的退出码
//    // 标定进程执行的结果是否正确
//    int num=addToTarget(1,100);
//    if(num == 5050
//    {
//        return 0;
//    }
//    else
//    {
//        return 1;
//    }
//    //printf("num:%d\n",num);
//    //return 0;
//}
